<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    function Star(name, age) {
      this.name = name
      this.age = age
    }
    // 每个原型对象都默认有一个constructor属性，指回构造函数本身。

    // Star.prototype.sing = function(){
    //     console.log('sing')
    // }
    // Star.prototype.dance = function(){
    //     console.log('跳舞')
    // }
    // Star.prototype.rap = function(){
    //     console.log('rapper')
    // }


    console.dir(Star)
    // 如果我们直接给原型对象赋值一个对象，相当于整个替换了原型对象里面的所有内容，
    // 原型内的constructor就丢失了。那我们也就不知道这个原型是和哪个构造函数相关联了
    // 所以，可以手动的利用constructor指回原来的构造函数

    Star.prototype = {
      constructor: Star,//手动添加回来
      sing: function () {
        console.log('sing');
      },
      dance: function () {
        console.log('跳舞');
      },
      rap: function () {
        console.log('rapper');
      },
    }

    const ldh = new Star('刘德华', 18)
    console.log(ldh)
    ldh.sing()
    ldh.dance()
    ldh.rap()

    let obj = { a: 1, b: 2 }
    obj.c = 3
    //给这个对象添加属性
    //  console.log(obj)
    obj = { d: 4 }
    console.log(obj)
  </script>
</body>

</html>